package com.autumn.platform.auth.core.access;

import com.autumn.platform.auth.core.access.impl.AccessControllerContext;

public interface IAccessControllerListener {

    /**
     * 授权前触发
     * 
     * @param permission 权限信息
     */
    default void before(IPermission permission) {}

    /**
     * 授权通过触发
     * 
     * @param permission 权限信息
     * @param context 授权上下文
     */
    default void onPass(IPermission permission, AccessControllerContext context) {}

    /**
     * 授权失败（拒绝访问）触发
     * 
     * @param permission 权限信息
     * @param context 授权上下文
     */
    default void onDeny(IPermission permission, AccessControllerContext context) {}

    /**
     * 授权时发生异常触发
     * 
     * @param permission 权限信息
     * @param context 授权上下文
     * @param exception 异常
     */
    default void onException(IPermission permission, AccessControllerContext context, Exception exception) {}
}
